public class Battle {
    boolean isHeroWin = false;

    public Boolean fight(Character hero, Character monster) {
        Thread thread = new Thread(() -> {
            int raund = 1;
            boolean isFightEnded = false;
            while (!isFightEnded) {
                System.out.println("Раунд" + raund);
                if (raund % 2 != 0) {
                    isFightEnded = attack(monster, hero);
                } else {
                    isFightEnded = attack(hero, monster);
                }
                raund += 1;
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return isHeroWin;
    }

    // Метод для совершения удара
    private Boolean attack(Character defender, Character attacker) {
        int damage = attacker.attack();
        int defenderHealth = defender.getHealthPoints();
        defender.setHealthPoints(defenderHealth - damage);
        // Если атака прошла, выводим в консоль сообщение об этом
        if (damage != 0) {
            System.out.println(String.format("%s Нанес удар в %d единиц!", attacker.getName(), damage));
            System.out
                    .println(String.format("У %s осталось %d единиц здоровья...", defender.getName(), defenderHealth));
        } else {
            System.out.println(String.format("%s промахнулся!", attacker.getName()));
        }

        if (defenderHealth <= 0 && defender instanceof Hero) {
            System.out.println("Извините, вы пали в бою...");
            isHeroWin = false;
            return true;
        }
        if (defenderHealth <= 0 && defender instanceof Monster) {
            System.out.println(String.format("Враг повержен! Вы получаете %d опыт и %d золота", defender.getXp(),
                    defender.getGold()));
            attacker.setXp(attacker.getXp() + defender.getXp());
            attacker.setGold(attacker.getGold() + defender.getGold());
            isHeroWin = true;
            return true;
        }

        return false;
    }
}